/******************************************************************************* * Copyright (c) 2016 Red Hat Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Mickael Istria (Red Hat Inc.) - initial implementation *******************************************************************************/ package org.eclipse.ui.internal.dialogs; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.content.IContentTypeManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.LayoutConstants; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.internal.WorkbenchMessages; /** * A dialog that asks for initial values to create a new content-type. * * @since 3.109 */ public class NewContentTypeDialog extends TitleAreaDialog { private String name; private IContentTypeManager manager; private ControlDecoration decorator; /** * @param parentShell */ protected NewContentTypeDialog(Shell parentShell, IContentTypeManager manager, IContentType parent) { super(parentShell); this.manager = manager; String baseName = name = WorkbenchMessages.ContentTypes_newContentTypeDialog_defaultNameNoParent; if (parent != null) { baseName = name = NLS.bind(WorkbenchMessages.ContentTypes_newContentTypeDialog_defaultNameWithParent, parent.getName()); } int suffix = 2; while (manager.getContentType(name) != null) { name = baseName + " (" + suffix + ')'; //$NON-NLS-1$ suffix++; } } /* * (non-Javadoc) * * @see * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets. * Shell) */ @Override protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(WorkbenchMessages.ContentTypes_newContentTypeDialog_title); } @Override protected Control createDialogArea(Composite parent) { Composite parentComposite = (Composite) super.createDialogArea(parent); Composite contents = new Composite(parentComposite, SWT.NONE); contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Label nameLabel = new Label(contents, SWT.LEFT); nameLabel.setText(WorkbenchMessages.ContentTypes_newContentTypeDialog_nameLabel); Text nameText = new Text(contents, SWT.SINGLE | SWT.BORDER); nameText.setText(name); nameText.addModifyListener(event -> { name = nameText.getText(); if (validateName()) { getButton(IDialogConstants.OK_ID).setEnabled(true); decorator.hide(); } else { getButton(IDialogConstants.OK_ID).setEnabled(false); decorator.show(); } }); decorator = new ControlDecoration(nameText, SWT.TOP | SWT.LEFT); decorator.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR) .getImage()); decorator.setDescriptionText(WorkbenchMessages.ContentTypes_newContentTypeDialog_invalidContentTypeName); decorator.hide(); setTitle(WorkbenchMessages.ContentTypes_newContentTypeDialog_title); setMessage(WorkbenchMessages.ContentTypes_newContentTypeDialog_descritption); Dialog.applyDialogFont(parentComposite); Point defaultMargins = LayoutConstants.getMargins(); GridLayoutFactory.fillDefaults().numColumns(2).margins(defaultMargins.x, defaultMargins.y) .generateLayout(contents); return contents; } private boolean validateName() { return name.length() > 0 && manager.getContentType(name) == null; } public String getName() { return name; } }